
#include "Universidad.h"


///////////////////////  Constructores y destructores  //////////////////
Universidad::Universidad(string nom = 0, string num = 0, string direc = 0)
{
	nombre = nom;
	numero = num;
	direccion = direc;
	lista = new Lista<Escuela>();

}

Universidad::~Universidad()
{
	delete lista;
}


//////////////////////////////////////////////////////////////////////////////




/////////////////////////////  Metodos set y get //////////////////////////////

string Universidad::getNumero()
{
	return numero;
}
string Universidad::getNombre()
{
	return nombre;
}
string Universidad::getDireccion()
{
	return direccion;
}
void Universidad::setDireccion(string direc)
{
	direccion = direc;
}
void Universidad::setNumero(string num)
{
	numero = num;
}

Lista<Escuela>* Universidad::getLista()
{
	return lista;
}

///////////////////////////////////////////////////////////////////////7

//---------------------metodos de listaEscuela----------------------


string Universidad::toStringCursosDeUnaEscuela(string nombre)
{
	stringstream s;
	Escuela* aux = lista->buscar(nombre);
	if(aux!=NULL)
	{
		s<<"Escuela: "<<nombre<<endl<<endl;
		//aux->getLista()->mostrarLista();
		s<<aux->getLista()->toString();
	}
	else
		s<<"Esa escuela no existe\n";
	return s.str();
}


string Universidad::toStringTodosLosCursos()
{
	stringstream s;
	lista->setActual(lista->getPrimero());
	while(lista->getActual()!=NULL)
	{
		s<<lista->getActual()->getInfo()->toString()<<endl<<endl;
		if(lista->getActual()->getInfo()->getLista()->getPrimero() != NULL)
			//actual->getEscuela()->getLista()->mostrarLista();
			s<<lista->getActual()->getInfo()->getLista()->toString();
		lista->setActual( lista->getActual()->getSigNodo());
	}
	return s.str();
}


Curso * Universidad::BuscarCursoPorCodigo(string c)
{
    Curso *aux;
	lista->setActual(lista->getPrimero());
	while(lista->getActual()!=NULL)
    {
        aux=lista->getActual()->getInfo()->getLista()->buscar(c);

        if(aux==NULL)
        	lista->setActual(lista->getActual()->getSigNodo());
        else
        	return aux;
    }
    return NULL;
}


Escuela *Universidad::devuelveEscuelaDeCursoEncontrado(string c)
{
    if(BuscarCursoPorCodigo(c)!=NULL)
    	return lista->getActual()->getInfo();
    else
    	return NULL;
}

Profesor* Universidad::BuscarProfePorCedula(string c)
{
    Profesor *aux;
	lista->setActual(lista->getPrimero());
    while(lista->getActual()!=NULL)
    {
        aux=lista->getActual()->getInfo()->getProfesores()->buscar(c);

        if(aux==NULL)
			lista->setActual(lista->getActual()->getSigNodo());
        else
        	return aux;
    }
    return NULL;
}


Escuela *Universidad::devuelveEscuelaDeProfeEncontrado(string c)
{
    if(BuscarProfePorCedula(c)!=NULL)
    	return lista->getActual()->getInfo();
    else
    	return NULL;
}


string Universidad::toStringEscuelasCursosProfes()
{
	stringstream s;
	lista->setActual(lista->getPrimero());
	while(lista->getActual() != NULL)
	{
		s<<"-----------------------------\n";
	    s<<lista->getActual()->getInfo()->toString()<<endl;
	    //actual->getEscuela()->mostrarCursosConProfes();
	    lista->getActual()->getInfo()->toStringCursosConProfes();
	    lista->setActual(lista->getActual()->getSigNodo());
    } 
	return s.str();
}

Estudiante* Universidad::buscarEstudianteCedulaOCarne(string c)
{
    Estudiante *aux;
	lista->setActual(lista->getPrimero());
    while(lista->getActual()!=NULL)
    {
        aux=lista->getActual()->getInfo()->getEstudiantes()->buscar(c);

        if(aux==NULL)
        	lista->setActual(lista->getActual()->getSigNodo());
        else
        	return aux;
    }
    return NULL;
}